608060405234801561001057600080fd5b5060405161200438038061200483398101604081905261002f916101a6565b338383600061003e83826102c4565b50600161004b82826102c4565b5050506001600160a01b03811661007c57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100858161009b565b50600861009282826102c4565b50505050610382565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261011457600080fd5b81516001600160401b0381111561012d5761012d6100ed565b604051601f8201601f19908116603f011681016001600160401b038111828210171561015b5761015b6100ed565b60405281815283820160200185101561017357600080fd5b60005b8281101561019257602081860181015183830182015201610176565b506000918101602001919091529392505050565b6000806000606084860312156101bb57600080fd5b83516001600160401b038111156101d157600080fd5b6101dd86828701610103565b602086015190945090506001600160401b038111156101fb57600080fd5b61020786828701610103565b604086015190935090506001600160401b0381111561022557600080fd5b61023186828701610103565b9150509250925092565b600181811c9082168061024f57607f821691505b60208210810361026f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156102bf57806000526020600020601f840160051c8101602085101561029c5750805b601f840160051c820191505b818110156102bc57600081556001016102a8565b50505b505050565b81516001600160401b038111156102dd576102dd6100ed565b6102f1816102eb845461023b565b84610275565b6020601f821160018114610325576000831561030d5750848201515b600019600385901b1c1916600184901b1784556102bc565b600084815260208120601f198516915b828110156103555787850151825560209485019460019092019101610335565b50848210156103735786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b611c73806103916000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80638da5cb5b116100cd578063b88d4fde11610081578063e0df5b6f11610066578063e0df5b6f146102f6578063e985e9c514610309578063f2fde38b1461035257600080fd5b8063b88d4fde146102d0578063c87b56dd146102e357600080fd5b806395d89b41116100b257806395d89b41146102a1578063a22cb465146102a9578063b45a3c0e146102bc57600080fd5b80638da5cb5b14610270578063927f59ba1461028e57600080fd5b806342842e0e116101245780636352211e116101095780636352211e1461023457806370a0823114610247578063715018a61461026857600080fd5b806342842e0e1461020e57806342966c681461022157600080fd5b8063081812fc11610155578063081812fc146101ae578063095ea7b3146101e657806323b872dd146101fb57600080fd5b806301ffc9a71461017157806306fdde0314610199575b600080fd5b61018461017f366004611545565b610365565b60405190151581526020015b60405180910390f35b6101a16103c1565b60405161019091906115cd565b6101c16101bc3660046115e0565b610453565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f96101f4366004611622565b610489565b005b6101f961020936600461164c565b610498565b6101f961021c36600461164c565b61058e565b6101f961022f3660046115e0565b6105ae565b6101c16102423660046115e0565b610667565b61025a610255366004611689565b610672565b604051908152602001610190565b6101f96106ed565b60065473ffffffffffffffffffffffffffffffffffffffff166101c1565b6101f961029c366004611722565b610701565b6101a161078b565b6101f96102b73660046117d6565b61079a565b6101846102ca3660046115e0565b50600190565b6101f96102de36600461188c565b6107a5565b6101a16102f13660046115e0565b6107bc565b6101f9610304366004611908565b610902565b610184610317366004611951565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b6101f9610360366004611689565b610916565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fb45a3c0e0000000000000000000000000000000000000000000000000000000014806103bb57506103bb82610977565b92915050565b6060600080546103d090611984565b80601f01602080910402602001604051908101604052809291908181526020018280546103fc90611984565b80156104495780601f1061041e57610100808354040283529160200191610449565b820191906000526020600020905b81548152906001019060200180831161042c57829003601f168201915b5050505050905090565b600061045e82610a5a565b5060008281526004602052604090205473ffffffffffffffffffffffffffffffffffffffff166103bb565b610494828233610ab9565b5050565b73ffffffffffffffffffffffffffffffffffffffff82166104ed576040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b60006104fa838333610ac6565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610588576040517f64283d7b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808616600483015260248201849052821660448201526064016104e4565b50505050565b6105a9838383604051806020016040528060008152506107a5565b505050565b336105b882610667565b73ffffffffffffffffffffffffffffffffffffffff161461065b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f426173654772616e74526563697069656e743a2063616c6c6572206973206e6f60448201527f7420746f6b656e206f776e65720000000000000000000000000000000000000060648201526084016104e4565b61066481610bac565b50565b60006103bb82610a5a565b600073ffffffffffffffffffffffffffffffffffffffff82166106c4576040517f89c62b64000000000000000000000000000000000000000000000000000000008152600060048201526024016104e4565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6106f5610bb8565b6106ff6000610c0b565b565b610709610bb8565b60005b815181101561049457600780549081906000610727836119d7565b919050555061074f83838151811061074157610741611a36565b602002602001015182610c82565b6040518181527f032bc66be43dbccb7487781d168eb7bda224628a3b2c3388bdf69b532a3a16119060200160405180910390a15060010161070c565b6060600180546103d090611984565b610494338383610c9c565b6107b0848484610498565b61058884848484610d99565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff16610870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f426173654772616e74526563697069656e743a2055524920717565727920666f60448201527f72206e6f6e6578697374656e7420746f6b656e0000000000000000000000000060648201526084016104e4565b6008805461087d90611984565b80601f01602080910402602001604051908101604052809291908181526020018280546108a990611984565b80156108f65780601f106108cb576101008083540402835291602001916108f6565b820191906000526020600020905b8154815290600101906020018083116108d957829003601f168201915b50505050509050919050565b61090a610bb8565b60086104948282611aac565b61091e610bb8565b73ffffffffffffffffffffffffffffffffffffffff811661096e576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024016104e4565b61066481610c0b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480610a0a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806103bb57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146103bb565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16806103bb576040517f7e273289000000000000000000000000000000000000000000000000000000008152600481018490526024016104e4565b6105a98383836001610f90565b60008281526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16801580610b0c575073ffffffffffffffffffffffffffffffffffffffff8516155b610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f426173654772616e74526563697069656e743a20746f6b656e207472616e736660448201527f657220697320424c4f434b45440000000000000000000000000000000000000060648201526084016104e4565b610ba385858561115b565b95945050505050565b61049460008233610ac6565b60065473ffffffffffffffffffffffffffffffffffffffff1633146106ff576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016104e4565b6006805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6104948282604051806020016040528060008152506112d8565b73ffffffffffffffffffffffffffffffffffffffff8216610d01576040517f5b08ba1800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016104e4565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83163b15610588576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063150b7a0290610e0e903390889087908790600401611bc5565b6020604051808303816000875af1925050508015610e67575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610e6491810190611c20565b60015b610ef6573d808015610e95576040519150601f19603f3d011682016040523d82523d6000602084013e610e9a565b606091505b508051600003610eee576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e4565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167f150b7a020000000000000000000000000000000000000000000000000000000014610f89576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104e4565b5050505050565b8080610fb1575073ffffffffffffffffffffffffffffffffffffffff821615155b15611106576000610fc184610a5a565b905073ffffffffffffffffffffffffffffffffffffffff83161580159061101457508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611053575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209387168352929052205460ff16155b156110a2576040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024016104e4565b811561110457838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60008281526002602052604081205473ffffffffffffffffffffffffffffffffffffffff90811690831615611195576111958184866112ef565b73ffffffffffffffffffffffffffffffffffffffff81161561120b576111bf600085600080610f90565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190555b73ffffffffffffffffffffffffffffffffffffffff8516156112545773ffffffffffffffffffffffffffffffffffffffff85166000908152600360205260409020805460010190555b60008481526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6112e2838361139f565b6105a96000848484610d99565b6112fa838383611450565b6105a95773ffffffffffffffffffffffffffffffffffffffff831661134e576040517f7e273289000000000000000000000000000000000000000000000000000000008152600481018290526024016104e4565b6040517f177e802f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602481018290526044016104e4565b73ffffffffffffffffffffffffffffffffffffffff82166113ef576040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600060048201526024016104e4565b60006113fd83836000610ac6565b905073ffffffffffffffffffffffffffffffffffffffff8116156105a9576040517f73c6ac6e000000000000000000000000000000000000000000000000000000008152600060048201526024016104e4565b600073ffffffffffffffffffffffffffffffffffffffff83161580159061150f57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806114de575073ffffffffffffffffffffffffffffffffffffffff80851660009081526005602090815260408083209387168352929052205460ff165b8061150f575060008281526004602052604090205473ffffffffffffffffffffffffffffffffffffffff8481169116145b949350505050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461066457600080fd5b60006020828403121561155757600080fd5b813561156281611517565b9392505050565b6000815180845260005b8181101561158f57602081850181015186830182015201611573565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006115626020830184611569565b6000602082840312156115f257600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461161d57600080fd5b919050565b6000806040838503121561163557600080fd5b61163e836115f9565b946020939093013593505050565b60008060006060848603121561166157600080fd5b61166a846115f9565b9250611678602085016115f9565b929592945050506040919091013590565b60006020828403121561169b57600080fd5b611562826115f9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561171a5761171a6116a4565b604052919050565b60006020828403121561173457600080fd5b813567ffffffffffffffff81111561174b57600080fd5b8201601f8101841361175c57600080fd5b803567ffffffffffffffff811115611776576117766116a4565b8060051b611786602082016116d3565b918252602081840181019290810190878411156117a257600080fd5b6020850194505b838510156117cb576117ba856115f9565b8252602094850194909101906117a9565b979650505050505050565b600080604083850312156117e957600080fd5b6117f2836115f9565b91506020830135801515811461180757600080fd5b809150509250929050565b60008067ffffffffffffffff84111561182d5761182d6116a4565b50601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016602001611860816116d3565b91505082815283838301111561187557600080fd5b828260208301376000602084830101529392505050565b600080600080608085870312156118a257600080fd5b6118ab856115f9565b93506118b9602086016115f9565b925060408501359150606085013567ffffffffffffffff8111156118dc57600080fd5b8501601f810187136118ed57600080fd5b6118fc87823560208401611812565b91505092959194509250565b60006020828403121561191a57600080fd5b813567ffffffffffffffff81111561193157600080fd5b8201601f8101841361194257600080fd5b61150f84823560208401611812565b6000806040838503121561196457600080fd5b61196d836115f9565b915061197b602084016115f9565b90509250929050565b600181811c9082168061199857607f821691505b6020821081036119d1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611a2f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b601f8211156105a957806000526020600020601f840160051c81016020851015611a8c5750805b601f840160051c820191505b81811015610f895760008155600101611a98565b815167ffffffffffffffff811115611ac657611ac66116a4565b611ada81611ad48454611984565b84611a65565b6020601f821160018114611b2c5760008315611af65750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610f89565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611b7a5787850151825560209485019460019092019101611b5a565b5084821015611bb657868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b73ffffffffffffffffffffffffffffffffffffffff8516815273ffffffffffffffffffffffffffffffffffffffff84166020820152826040820152608060608201526000611c166080830184611569565b9695505050505050565b600060208284031215611c3257600080fd5b81516115628161151756fea2646970667358221220ef9e999d83e41404bddba34d1f276a69fcdcb8fb64b3cd905fb9cb3504cf2eb864736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001442617365204772616e7420526563697069656e740000000000000000000000000000000000000000000000000000000000000000000000000000000000000009424153454752414e5400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d52696a436f7737384e4a55706e48555a746272664574716974424b586d477158316a39773251646a6a39376e0000000000000000000000