60806040523480156200001157600080fd5b506200001c62000022565b620000d6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000735760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d35780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61514e80620000e66000396000f3fe60806040526004361061041b5760003560e01c80636f8b44b01161021e578063a9059cbb11610123578063d8990b66116100ab578063ea598cb01161007a578063ea598cb014610c79578063eff9884314610c99578063f2fde38b14610caf578063fb8363b614610ccf578063fc72ed5b14610cfc57600080fd5b8063d8990b6614610bed578063dd62ed3e14610c0f578063e30c397814610c2f578063e6c8a5f314610c4457600080fd5b8063cc23e3a2116100f2578063cc23e3a214610b57578063cc4eedc914610b77578063cd6dc68714610b97578063d547741f14610bb7578063d5abeb0114610bd757600080fd5b8063a9059cbb14610ae7578063b187bd2614610b07578063b9e205ae14610b21578063be2b9cd514610b4157600080fd5b806389067c5e116101a657806395d89b411161017557806395d89b4114610a67578063996c6cc314610a7c578063a1e8028014610a9c578063a217fddf14610abc578063a7602c7e14610ad157600080fd5b806389067c5e14610a065780638abdf5aa14610a1c5780638da5cb5b14610a3257806391d1485414610a4757600080fd5b806379ba5097116101ed57806379ba50971461097c5780637b9fe087146109915780637e203c8b146109b1578063829c1c57146109c657806382fe535a146109e657600080fd5b80636f8b44b01461090757806370a0823114610927578063715018a61461094757806372a1f67d1461095c57600080fd5b806336568abe116103245780634e44e82a116102ac5780635cdf76f81161027b5780635cdf76f8146108395780635cf4cde01461085957806366442a061461086f57806368cd79b3146108c55780636f6c3529146108e557600080fd5b80634e44e82a146107ab5780635148e961146107cb57806358e3b5ec146107eb5780635a9249e61461080157600080fd5b8063410dbf7e116102f3578063410dbf7e146106e3578063420fa47e146107035780634310d1281461073757806344be04041461076b5780634772daef1461078b57600080fd5b806336568abe14610659578063389ed2671461067957806339c5dec7146106ad5780633ba0b9a9146106cd57600080fd5b806323095721116103a7578063295a3af011610376578063295a3af0146105bd5780632d1ede9a146105dd5780632e17de78146105fd5780632f2ff15d1461061d578063313ce5671461063d57600080fd5b8063230957211461054a57806323b872dd1461055d578063248a9ca31461057d5780632680f5cd1461059d57600080fd5b80630fbdc677116103ee5780630fbdc677146104ba57806316c38b3c146104dc5780631723be12146104fc57806318160ddd1461051257806320ba56981461053457600080fd5b806301ffc9a71461042057806306fdde0314610455578063095ea7b3146104775780630e23889414610497575b600080fd5b34801561042c57600080fd5b5061044061043b366004614903565b610d1c565b60405190151581526020015b60405180910390f35b34801561046157600080fd5b5061046a610d53565b60405161044c919061497a565b34801561048357600080fd5b506104406104923660046149a9565b610e16565b3480156104a357600080fd5b506104ac610e2e565b60405190815260200161044c565b3480156104c657600080fd5b506104da6104d53660046149d3565b610edc565b005b3480156104e857600080fd5b506104da6104f73660046149fa565b610fb6565b34801561050857600080fd5b506104ac600f5481565b34801561051e57600080fd5b50600080516020615051833981519152546104ac565b34801561054057600080fd5b506104ac60015481565b6104da6105583660046149d3565b611073565b34801561056957600080fd5b50610440610578366004614a17565b6115d0565b34801561058957600080fd5b506104ac6105983660046149d3565b6115f4565b3480156105a957600080fd5b506104da6105b83660046149d3565b611616565b3480156105c957600080fd5b506104ac6105d83660046149d3565b611752565b3480156105e957600080fd5b506104da6105f8366004614a17565b611772565b34801561060957600080fd5b506104da6106183660046149d3565b611a0d565b34801561062957600080fd5b506104da610638366004614a53565b611d16565b34801561064957600080fd5b506040516009815260200161044c565b34801561066557600080fd5b506104da610674366004614a53565b611d38565b34801561068557600080fd5b506104ac7f139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46d81565b3480156106b957600080fd5b506104da6106c8366004614a7f565b611d70565b3480156106d957600080fd5b506104ac60005481565b3480156106ef57600080fd5b506104da6106fe3660046149d3565b611e48565b34801561070f57600080fd5b506104ac7f9e3114703ec4a93cd6bc7e2610274229541e8ba5acacf7825f26bce4fae601e081565b34801561074357600080fd5b506104ac7f7e21c1f853a961caf8adc0c26c941d090de97558d402e0fe1d0eea44495dee7d81565b34801561077757600080fd5b506104da6107863660046149d3565b611f15565b34801561079757600080fd5b506104da6107a6366004614ab0565b611fe2565b3480156107b757600080fd5b506104ac6107c63660046149d3565b61205b565b3480156107d757600080fd5b506104da6107e6366004614a7f565b612074565b3480156107f757600080fd5b506104ac600e5481565b34801561080d57600080fd5b50601054610821906001600160a01b031681565b6040516001600160a01b03909116815260200161044c565b34801561084557600080fd5b506104da6108543660046149d3565b612135565b34801561086557600080fd5b506104ac60045481565b34801561087b57600080fd5b5061088f61088a3660046149a9565b612206565b604080519586526020860194909452911515928401929092526001600160a01b039091166060830152608082015260a00161044c565b3480156108d157600080fd5b506104da6108e03660046149d3565b612260565b3480156108f157600080fd5b506104ac6000805160206150f983398151915281565b34801561091357600080fd5b506104da6109223660046149d3565b612334565b34801561093357600080fd5b506104ac610942366004614a7f565b612421565b34801561095357600080fd5b506104da612449565b34801561096857600080fd5b506104ac6109773660046149d3565b612453565b34801561098857600080fd5b506104da612476565b34801561099d57600080fd5b506104da6109ac3660046149a9565b6124bb565b3480156109bd57600080fd5b5061046a6126de565b3480156109d257600080fd5b506104da6109e13660046149d3565b61276c565b3480156109f257600080fd5b50600b54610821906001600160a01b031681565b348015610a1257600080fd5b506104ac60035481565b348015610a2857600080fd5b506104ac600c5481565b348015610a3e57600080fd5b5061082161283b565b348015610a5357600080fd5b50610440610a62366004614a53565b612870565b348015610a7357600080fd5b5061046a6128a8565b348015610a8857600080fd5b50600554610821906001600160a01b031681565b348015610aa857600080fd5b506104da610ab7366004614b61565b6128e7565b348015610ac857600080fd5b506104ac600081565b348015610add57600080fd5b506104ac60095481565b348015610af357600080fd5b50610440610b023660046149a9565b613164565b348015610b1357600080fd5b506007546104409060ff1681565b348015610b2d57600080fd5b506104da610b3c3660046149d3565b613172565b348015610b4d57600080fd5b506104ac60065481565b348015610b6357600080fd5b506104da610b723660046149d3565b6132eb565b348015610b8357600080fd5b506104da610b923660046149d3565b6133b9565b348015610ba357600080fd5b506104da610bb23660046149a9565b6134ed565b348015610bc357600080fd5b506104da610bd2366004614a53565b61372f565b348015610be357600080fd5b506104ac600d5481565b348015610bf957600080fd5b506104ac60008051602061507183398151915281565b348015610c1b57600080fd5b506104ac610c2a366004614bd6565b61374b565b348015610c3b57600080fd5b50610821613795565b348015610c5057600080fd5b50610c64610c5f3660046149d3565b6137be565b6040805192835260208301919091520161044c565b348015610c8557600080fd5b506104da610c943660046149d3565b6138db565b348015610ca557600080fd5b506104ac60025481565b348015610cbb57600080fd5b506104da610cca366004614a7f565b613cea565b348015610cdb57600080fd5b50610cef610cea366004614a7f565b613d6f565b60405161044c9190614c00565b348015610d0857600080fd5b506104da610d17366004614a7f565b613e20565b60006001600160e01b03198216637965db0b60e01b1480610d4d57506301ffc9a760e01b6001600160e01b03198316145b92915050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03805460609160008051602061503183398151915291610d9290614c79565b80601f0160208091040260200160405190810160405280929190818152602001828054610dbe90614c79565b8015610e0b5780601f10610de057610100808354040283529160200191610e0b565b820191906000526020600020905b815481529060010190602001808311610dee57829003601f168201915b505050505091505090565b600033610e24818585613f02565b5060019392505050565b600080610e476000805160206150518339815191525490565b600d54610e549190614cc9565b905080600003610e6657600091505090565b60008054610e7c83670de0b6b3a7640000614cdc565b610e869190614cf3565b90506000806002541115610ec057600254610ea3906103e8614cc9565b610eaf836103e8614cdc565b610eb99190614cf3565b9050610ec3565b50805b600060035482610ed39190614d15565b95945050505050565b610ef460008051602061507183398151915233612870565b610f195760405162461bcd60e51b8152600401610f1090614d28565b60405180910390fd5b60008111610f7a5760405162461bcd60e51b815260206004820152602860248201527f4d617820756e7374616b65207265717565737473206d757374206265206d6f72604482015267065207468616e20360c41b6064820152608401610f10565b60098190556040518181527f3822db87795eff9f96c9dca0cd5bc25a68f62c46e0bc261b5f67bbd5a598c495906020015b60405180910390a150565b610fe07f139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46d33612870565b61102c5760405162461bcd60e51b815260206004820152601f60248201527f43616c6c657220646f6573206e6f7420686176652050415553455f524f4c45006044820152606401610f10565b6007805460ff191682151590811790915560405160ff909116151581527f752d7e161ff5146f80e3820893176eb40532811e5e20400dfdde57455213706a90602001610fab565b61107b613f0f565b60075460ff161561109e5760405162461bcd60e51b8152600401610f1090614d77565b60055460408051808201909152601f81527f77726170706564546f6b656e206164647265737320697320696e76616c69640060208201526110e8916001600160a01b031690613f47565b600b5460408051606081019091526021808252611117926001600160a01b031691906150106020830139613f47565b600c543410156111695760405162461bcd60e51b815260206004820152601c60248201527f46656520616d6f756e74206973206e6f742073756666696369656e74000000006044820152606401610f10565b60015481116111b25760405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a59081ddcdd151053c8185b5bdd5b9d605a1b6044820152606401610f10565b806111bc33612421565b101561120a5760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e742077737454414f2062616c616e636500000000006044820152606401610f10565b600061121582612453565b336000908152600a6020526040812054919250805b828110156113a957336000908152600a6020526040812080548390811061125357611253614da3565b6000918252602090912060049091020154905080156112725750611397565b6040805160a081018252878152602080820188905260008284018190526005546001600160a01b03166060840152426080840152338152600a909152919091208054849081106112c4576112c4614da3565b6000918252602091829020835160049290920201908155828201516001808301919091556040808501516002840180546060808901516001600160a81b0319909216931515610100600160a81b031916939093176101006001600160a01b039283160217909155608096870151600390950194909455600554825189815242968101969096529185018c905284018a90529091169282019290925290935033907fbacf71ad475b68e36b9cd14cedd8cf7d1f098c65f4c59255d2ade1ceae5782529060a00160405180910390a2506113a9565b806113a181614db9565b91505061122a565b508061152f57600954336000908152600a6020526040902054106114195760405162461bcd60e51b815260206004820152602160248201527f4d6178696d756d20756e7374616b6520726571756573747320657863656564656044820152601960fa1b6064820152608401610f10565b336000818152600a60209081526040808320815160a081018352898152808401898152818401868152600580546001600160a01b03908116606086019081524260808701818152885460018181018b55998d529a909b2096516004909a0290960198895593519588019590955590516002870180549351861661010002610100600160a81b0319921515929092166001600160a81b031990941693909317179091559451600390940193909355925490517fbacf71ad475b68e36b9cd14cedd8cf7d1f098c65f4c59255d2ade1ceae5782529361152693889390928b928b9216909485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b60405180910390a25b6115393385613f6f565b600b54600c546040516000926001600160a01b03169180156108fc029184818181858888f193505050509050806115b25760405162461bcd60e51b815260206004820152601b60248201527f5365727669636520666565207472616e73666572206661696c656400000000006044820152606401610f10565b505050506115cd60016000805160206150d983398151915255565b50565b6000336115de858285613fb9565b6115e9858585614019565b506001949350505050565b60009081526000805160206150b9833981519152602052604090206001015490565b61162e6000805160206150f983398151915233612870565b61164a5760405162461bcd60e51b8152600401610f1090614dd2565b600081116116a65760405162461bcd60e51b815260206004820152602360248201527f4e657720757070657220626f756e64206d757374206265206d6f72652074686160448201526206e20360ec1b6064820152608401610f10565b600e54811161171d5760405162461bcd60e51b815260206004820152603860248201527f4e657720757070657220626f756e64206d75737420626520677265617465722060448201527f7468616e2063757272656e74206c6f77657220626f756e6400000000000000006064820152608401610f10565b600f8190556040518181527f4091f60ba6c7aad614db78570cc879e0c6c771deb4738653a4e5acda9cf3b24f90602001610fab565b6000805461176883670de0b6b3a7640000614cdc565b610d4d9190614cf3565b61179c7f9e3114703ec4a93cd6bc7e2610274229541e8ba5acacf7825f26bce4fae601e033612870565b6117b85760405162461bcd60e51b8152600401610f1090614e1b565b60075460ff16156117db5760405162461bcd60e51b8152600401610f1090614d77565b6117fd8260405180606001604052806028815260200161509160289139613f47565b6000811161184d5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610f10565b6040516370a0823160e01b815230600482015283906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ba9190614e64565b90508281101561190c5760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f75676820746f6b656e7320696e20636f6e74726163740000006044820152606401610f10565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018590526000919084169063a9059cbb906044016020604051808303816000875af115801561195f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119839190614e7d565b9050806119ca5760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b6044820152606401610f10565b7fcf343f8f9fbc18b83ca8ace5a1d7f60b823933d6fd1e58458dad0d5f210caae98686866040516119fd93929190614e9a565b60405180910390a1505050505050565b611a15613f0f565b60075460ff1615611a385760405162461bcd60e51b8152600401610f1090614d77565b336000908152600a60205260409020548110611a8e5760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840e4cae2eacae6e840d2dcc8caf605b1b6044820152606401610f10565b336000908152600a60205260408120805483908110611aaf57611aaf614da3565b60009182526020918290206040805160a0810182526004939093029091018054808452600182015494840194909452600281015460ff81161515928401929092526101009091046001600160a01b031660608301526003015460808201529150611b5b5760405162461bcd60e51b815260206004820152601860248201527f4e6f20756e7374616b65207265717565737420666f756e6400000000000000006044820152606401610f10565b8060400151611bac5760405162461bcd60e51b815260206004820152601860248201527f556e7374616b65206e6f7420617070726f7665642079657400000000000000006044820152606401610f10565b602080820151336000908152600a9092526040909120805484908110611bd457611bd4614da3565b600091825260208220600491820201828155600181018390556002810180546001600160a81b0319169055600301829055606084015160405163a9059cbb60e01b81523392810192909252602482018490526001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611c58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7c9190614e7d565b905080611cc25760405162461bcd60e51b81526020600482015260146024820152731dd51053c81d1c985b9cd9995c8819985a5b195960621b6044820152606401610f10565b6040805185815242602082015233917ff60fc3345e4a664f6362b5b4012f91076079b5510d9d05200c7bb2dfa42527a1910160405180910390a25050506115cd60016000805160206150d983398151915255565b611d1f826115f4565b611d2881614078565b611d328383614082565b50505050565b6001600160a01b0381163314611d615760405163334bd91960e11b815260040160405180910390fd5b611d6b8282614127565b505050565b611d8860008051602061507183398151915233612870565b611da45760405162461bcd60e51b8152600401610f1090614d28565b6001600160a01b038116611dfa5760405162461bcd60e51b815260206004820152601d60248201527f50726f746f636f6c207661756c742063616e6e6f74206265206e756c6c0000006044820152606401610f10565b601080546001600160a01b0319166001600160a01b0383169081179091556040519081527fc951a375519c58813e1685228d8f3e6598feb2b4b983bf8c884d75ec66df4e7690602001610fab565b611e6060008051602061507183398151915233612870565b611e7c5760405162461bcd60e51b8152600401610f1090614d28565b60148110611ee05760405162461bcd60e51b815260206004820152602b60248201527f5374616b696e67206665652063616e6e6f74206265206d6f7265207468616e2060448201526a0657175616c20746f2032360ac1b6064820152608401610f10565b60028190556040518181527f14b8f3121162b96e557f0b6b5ec1ca50101edca232c06fe45c5050b18ed7f5c690602001610fab565b611f2d60008051602061507183398151915233612870565b611f495760405162461bcd60e51b8152600401610f1090614d28565b60008111611fad5760405162461bcd60e51b815260206004820152602b60248201527f4d6178206465706f736974207065722072657175657374206d7573742062652060448201526a06d6f7265207468616e20360ac1b6064820152608401610f10565b60068190556040518181527f8ae9492f6d2f8c6b1e56cf2abf5f30b8678b0411dedc80a9a26bd32ddb9f1df990602001610fab565b611ffa60008051602061507183398151915233612870565b6120165760405162461bcd60e51b8152600401610f1090614d28565b61201f816141a3565b600861202b8282614f0c565b507f02d968275bdee5bacef97681e75f14615a23ba3ded42b18c68054038d6d5ba4881604051610fab919061497a565b6000670de0b6b3a7640000600054836117689190614cdc565b61208c60008051602061507183398151915233612870565b6120a85760405162461bcd60e51b8152600401610f1090614d28565b6120e7816040518060400160405280601b81526020017f7754414f20616464726573732063616e6e6f74206265206e756c6c0000000000815250613f47565b600580546001600160a01b0319166001600160a01b0383169081179091556040519081527f1cbc653ef44270e1e1b12585f3b14b78e00ca641597db4aa843efd87ce838b5c90602001610fab565b61214d60008051602061507183398151915233612870565b6121695760405162461bcd60e51b8152600401610f1090614d28565b662386f26fc100008111156121d15760405162461bcd60e51b815260206004820152602860248201527f53657276696365206665652063616e6e6f74206265206d6f7265207468616e206044820152670605c6062408aa8960c31b6064820152608401610f10565b600c8190556040518181527f8b38756fb556c8c4a497c16769c97c5da0bd2caafd23456b1b1c9ab4206fba5090602001610fab565b600a602052816000526040600020818154811061222257600080fd5b60009182526020909120600490910201805460018201546002830154600390930154919450925060ff82169161010090046001600160a01b03169085565b61227860008051602061507183398151915233612870565b6122945760405162461bcd60e51b8152600401610f1090614d28565b60035481116122ff5760405162461bcd60e51b815260206004820152603160248201527f4d696e207374616b696e6720616d6f756e74206d757374206265206d6f7265206044820152707468616e206272696467696e672066656560781b6064820152608401610f10565b60048190556040518181527f61e72f410bf254d0a4e3ae5404b6179ce38ae766eff8f767dc5a122ee4a1653d90602001610fab565b61234c60008051602061507183398151915233612870565b6123685760405162461bcd60e51b8152600401610f1090614d28565b6000805160206150518339815191525481116123ec5760405162461bcd60e51b815260206004820152603860248201527f4d617820737570706c79206d7573742062652067726561746572207468616e2060448201527f7468652063757272656e7420746f74616c20737570706c7900000000000000006064820152608401610f10565b600d8190556040518181527fe493ec45ddd3a76acef0c00e0a4cc1e449100df6158b37ca497ed787681cbb5b90602001610fab565b6001600160a01b03166000908152600080516020615031833981519152602052604090205490565b612451614206565b565b600080546001546124649084614cc9565b61176890670de0b6b3a7640000614cdc565b3380612480613795565b6001600160a01b0316146124b25760405163118cdaa760e01b81526001600160a01b0382166004820152602401610f10565b6115cd81614238565b6124e57f9e3114703ec4a93cd6bc7e2610274229541e8ba5acacf7825f26bce4fae601e033612870565b6125015760405162461bcd60e51b8152600401610f1090614e1b565b60075460ff16156125245760405162461bcd60e51b8152600401610f1090614d77565b6125468260405180606001604052806028815260200161509160289139613f47565b600081116125965760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610f10565b47818110156125f35760405162461bcd60e51b8152602060048201526024808201527f4e6f7420656e6f756768206e617469766520746f6b656e7320696e20636f6e746044820152631c9858dd60e21b6064820152608401610f10565b6000836001600160a01b03168360405160006040518083038185875af1925050503d8060008114612640576040519150601f19603f3d011682016040523d82523d6000602084013e612645565b606091505b50509050806126965760405162461bcd60e51b815260206004820152601c60248201527f4e617469766520746f6b656e207472616e73666572206661696c6564000000006044820152606401610f10565b604080516001600160a01b0386168152602081018590527fbf5083663e042fcc8c207dc7c302c797ab721761e0d1ab346cf343341b67f583910160405180910390a150505050565b600880546126eb90614c79565b80601f016020809104026020016040519081016040528092919081815260200182805461271790614c79565b80156127645780601f1061273957610100808354040283529160200191612764565b820191906000526020600020905b81548152906001019060200180831161274757829003601f168201915b505050505081565b61278460008051602061507183398151915233612870565b6127a05760405162461bcd60e51b8152600401610f1090614d28565b630bebc2008111156128065760405162461bcd60e51b815260206004820152602960248201527f556e7374616b696e67206665652063616e6e6f74206265206d6f7265207468616044820152686e20302e322054414f60b81b6064820152608401610f10565b60018190556040518181527f671bd930a19e6b5b8ff84de6230a7b8a922829f8b7581df2e39d50d71f92987490602001610fab565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b60009182526000805160206150b9833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace04805460609160008051602061503183398151915291610d9290614c79565b6129117f7e21c1f853a961caf8adc0c26c941d090de97558d402e0fe1d0eea44495dee7d33612870565b6129725760405162461bcd60e51b815260206004820152602c60248201527f43616c6c657220646f6573206e6f74206861766520415050524f56455f57495460448201526b4844524157414c5f524f4c4560a01b6064820152608401610f10565b61297a613f0f565b60075460ff161561299d5760405162461bcd60e51b8152600401610f1090614d77565b6000816129ec5760405162461bcd60e51b815260206004820152601760248201527f526571756573747320617272617920697320656d7074790000000000000000006044820152606401610f10565b600a600084846000818110612a0357612a03614da3565b612a199260206040909202019081019150614a7f565b6001600160a01b03166001600160a01b031681526020019081526020016000208054905083836000818110612a5057612a50614da3565b9050604002016020013510612ab15760405162461bcd60e51b815260206004820152602160248201527f4669727374207265717565737420696e646578206f7574206f6620626f756e646044820152607360f81b6064820152608401610f10565b6000600a600085856000818110612aca57612aca614da3565b612ae09260206040909202019081019150614a7f565b6001600160a01b03166001600160a01b0316815260200190815260200160002084846000818110612b1357612b13614da3565b9050604002016020013581548110612b2d57612b2d614da3565b600091825260208220600260049092020101546001600160a01b036101009091041691505b83811015612e905736858583818110612b6d57612b6d614da3565b604002919091019150600a90506000612b896020840184614a7f565b6001600160a01b03168152602080820192909252604001600020549082013510612bed5760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840e4cae2eacae6e840d2dcc8caf605b1b6044820152606401610f10565b6000600a81612bff6020850185614a7f565b6001600160a01b03166001600160a01b03168152602001908152602001600020826020013581548110612c3457612c34614da3565b90600052602060002090600402016000015411612c885760405162461bcd60e51b815260206004820152601260248201527114995c5d595cdd081a5cc81a5b9d985b1a5960721b6044820152606401610f10565b600a6000612c996020840184614a7f565b6001600160a01b03166001600160a01b03168152602001908152602001600020816020013581548110612cce57612cce614da3565b600091825260209091206002600490920201015460ff1615612d325760405162461bcd60e51b815260206004820152601b60248201527f5265717565737420697320616c726561647920617070726f76656400000000006044820152606401610f10565b6001600160a01b038316600a6000612d4d6020850185614a7f565b6001600160a01b03166001600160a01b03168152602001908152602001600020826020013581548110612d8257612d82614da3565b600091825260209091206004909102016002015461010090046001600160a01b031614612e175760405162461bcd60e51b815260206004820152603960248201527f5772617070656420746f6b656e206973206e6f74207468652073616d6520616360448201527f726f737320616c6c20756e7374616b65207265717565737473000000000000006064820152608401610f10565b600a6000612e286020840184614a7f565b6001600160a01b03166001600160a01b03168152602001908152602001600020816020013581548110612e5d57612e5d614da3565b90600052602060002090600402016001015484612e7a9190614d15565b9350508080612e8890614db9565b915050612b52565b50604051636eb1769f60e11b815233600482015230602482015282906001600160a01b0383169063dd62ed3e90604401602060405180830381865afa158015612edd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f019190614e64565b1015612f4f5760405162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e7420746f6b656e20616c6c6f77616e6365000000006044820152606401610f10565b60005b83811015612ff55736858583818110612f6d57612f6d614da3565b60400291909101915060019050600a6000612f8b6020850185614a7f565b6001600160a01b03166001600160a01b03168152602001908152602001600020826020013581548110612fc057612fc0614da3565b60009182526020909120600490910201600201805460ff19169115159190911790555080612fed81614db9565b915050612f52565b506040516323b872dd60e01b81526001600160a01b038216906323b872dd9061302690339030908790600401614e9a565b6020604051808303816000875af1158015613045573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130699190614e7d565b6130ae5760405162461bcd60e51b81526020600482015260166024820152751d185bd05b5d081d1c985b9cd9995c8819985a5b195960521b6044820152606401610f10565b60005b8381101561314657368585838181106130cc576130cc614da3565b6040029190910191506130e490506020820182614a7f565b6001600160a01b03167f6989ab5544b7750d8fd06869e7fc1852b2f28bf9d75e9fa272405986fd263a6482602001354260405161312b929190918252602082015260400190565b60405180910390a2508061313e81614db9565b9150506130b1565b50505061316060016000805160206150d983398151915255565b5050565b600033610e24818585614019565b61318a6000805160206150f983398151915233612870565b6131a65760405162461bcd60e51b8152600401610f1090614dd2565b600081116131f65760405162461bcd60e51b815260206004820152601c60248201527f4e65772072617465206d757374206265206d6f7265207468616e2030000000006044820152606401610f10565b600e54811015801561320a5750600f548111155b6132565760405162461bcd60e51b815260206004820152601e60248201527f4e65772072617465206d7573742062652077697468696e20626f756e647300006044820152606401610f10565b6000600e5411801561326a57506000600f54115b6132b65760405162461bcd60e51b815260206004820152601a60248201527f426f756e6473206d757374206265206d6f7265207468616e20300000000000006044820152606401610f10565b60008190556040518181527f4fc1b45960547ee95894b08a284c3c066cf5aca706a7420639c42c3ec2e118a490602001610fab565b61330360008051602061507183398151915233612870565b61331f5760405162461bcd60e51b8152600401610f1090614d28565b630bebc2008111156133845760405162461bcd60e51b815260206004820152602860248201527f4272696467696e67206665652063616e6e6f74206265206d6f7265207468616e60448201526720302e322054414f60c01b6064820152608401610f10565b60038190556040518181527f04d485944ec6b81a573c140fc8ea83b6738f1bbb036d17d185027a5c4107cdf990602001610fab565b6133d16000805160206150f983398151915233612870565b6133ed5760405162461bcd60e51b8152600401610f1090614dd2565b600081116134495760405162461bcd60e51b815260206004820152602360248201527f4e6577206c6f77657220626f756e64206d757374206265206d6f72652074686160448201526206e20360ec1b6064820152608401610f10565b600f5481106134b85760405162461bcd60e51b815260206004820152603560248201527f4e6577206c6f77657220626f756e64206d757374206265206c657373207468616044820152741b8818dd5c9c995b9d081d5c1c195c88189bdd5b99605a1b6064820152608401610f10565b600e8190556040518181527ff995fb2f30f70b5dacab19046768ab20d01b477e6a3a0075a2fb2fad3872b77690602001610fab565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156135335750825b905060008267ffffffffffffffff1660011480156135505750303b155b90508115801561355e575080155b1561357c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156135a657845460ff60401b1916600160401b1785555b6001600160a01b0387166135f35760405162461bcd60e51b815260206004820152601460248201527313dddb995c8818d85b9b9bdd081899481b9d5b1b60621b6044820152606401610f10565b6000861161364e5760405162461bcd60e51b815260206004820152602260248201527f496e697469616c20737570706c79206d757374206265206d6f7265207468616e604482015261020360f41b6064820152608401610f10565b6136a26040518060400160405280601581526020017454656e736f72706c6578205374616b65642054414f60581b81525060405180604001604052806005815260200164737454414f60d81b815250614270565b6136ab87614282565b6136b3614293565b6136bb61429b565b6136c66000806142ab565b6136cf87614238565b6136da600088614082565b50600d869055831561372657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b613738826115f4565b61374181614078565b611d328383614127565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00612860565b60008060035483116138255760405162461bcd60e51b815260206004820152602a60248201527f7754414f20616d6f756e74206d757374206265206d6f7265207468616e206272604482015269696467696e672066656560b01b6064820152608401610f10565b6000600354846138359190614cc9565b90506000806002541115613861576103e8600254836138549190614cdc565b61385e9190614cf3565b90505b600061386d8284614cc9565b9050600081116138d15760405162461bcd60e51b815260206004820152602960248201527f5772617020616d6f756e7420616674657220666565206d757374206265206d6f60448201526807265207468616e20360bc1b6064820152608401610f10565b9590945092505050565b6138e3613f0f565b60075460ff16156139065760405162461bcd60e51b8152600401610f1090614d77565b8060065410156139585760405162461bcd60e51b815260206004820152601e60248201527f4465706f73697420616d6f756e742065786365656473206d6178696d756d00006044820152606401610f10565b60006008805461396790614c79565b80601f016020809104026020016040519081016040528092919081815260200182805461399390614c79565b80156139e05780601f106139b5576101008083540402835291602001916139e0565b820191906000526020600020905b8154815290600101906020018083116139c357829003601f168201915b5050600554939450506001600160a01b039092169150613a019050826141a3565b613a40816040518060400160405280601f81526020017f77726170706564546f6b656e206164647265737320697320696e76616c696400815250613f47565b6040516370a0823160e01b815233600482015283906001600160a01b038316906370a0823190602401602060405180830381865afa158015613a86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aaa9190614e64565b1015613af85760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e74207754414f2062616c616e6365000000000000006044820152606401610f10565b60105460408051606081019091526022808252613b27926001600160a01b03169190614fee6020830139613f47565b6004548311613b845760405162461bcd60e51b8152602060048201526024808201527f446f6573206e6f74206d656574206d696e696d756d207374616b696e6720616d6044820152631bdd5b9d60e21b6064820152608401610f10565b600080613b90856137be565b915091506000613b9f8361205b565b9050613bab338261430e565b613bb482614380565b600060035484613bc49190614d15565b9050613bcf8161445a565b6005546040516302a3830960e41b81526000916001600160a01b031690632a38309090613c029085908b90600401614fcc565b6020604051808303816000875af1158015613c21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c459190614e7d565b905080613c895760405162461bcd60e51b8152602060048201526012602482015271109c9a5919d948189858dac819985a5b195960721b6044820152606401610f10565b60408051428152602081018a905290810184905233907f445b6299c386d845a282565eba224a183ae1062133e1b062b35d93f855fd59bd9060600160405180910390a2505050505050506115cd60016000805160206150d983398151915255565b613cf2614206565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b0383169081178255613d3661283b565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b6001600160a01b0381166000908152600a60209081526040808320805482518185028101850190935280835260609492939192909184015b82821015613e155760008481526020908190206040805160a081018252600486029092018054835260018082015484860152600282015460ff81161515938501939093526101009092046001600160a01b031660608401526003015460808301529083529092019101613da7565b505050509050919050565b613e3860008051602061507183398151915233612870565b613e545760405162461bcd60e51b8152600401610f1090614d28565b6001600160a01b038116613eb45760405162461bcd60e51b815260206004820152602160248201527f5769746864726177616c206d616e616765722063616e6e6f74206265206e756c6044820152601b60fa1b6064820152608401610f10565b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527fd85a538f003fe4c6d5aaff33960bcc7bcf9f994d5a6ddda17b8e8901b57bf7df90602001610fab565b611d6b8383836001614529565b6000805160206150d9833981519152805460011901613f4157604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b806001600160a01b038316611d6b5760405162461bcd60e51b8152600401610f10919061497a565b6001600160a01b038216613f9957604051634b637e8f60e11b815260006004820152602401610f10565b61316082600083614611565b60016000805160206150d983398151915255565b6000613fc5848461374b565b90506000198114611d32578181101561400a57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610f10565b611d3284848484036000614529565b6001600160a01b03831661404357604051634b637e8f60e11b815260006004820152602401610f10565b6001600160a01b03821661406d5760405163ec442f0560e01b815260006004820152602401610f10565b611d6b838383614611565b6115cd813361474f565b60006000805160206150b983398151915261409d8484612870565b61411d576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556140d33390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610d4d565b6000915050610d4d565b60006000805160206150b98339815191526141428484612870565b1561411d576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610d4d565b80516030146115cd5760405162461bcd60e51b815260206004820152602960248201527f6e617469766557616c6c65745265636569766572206d757374206265206f66206044820152680d8cadccee8d04068760bb1b6064820152608401610f10565b3361420f61283b565b6001600160a01b0316146124515760405163118cdaa760e01b8152336004820152602401610f10565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b031916815561316082614788565b6142786147f9565b6131608282614842565b61428a6147f9565b6115cd81614893565b6124516147f9565b6142a36147f9565b6124516148c5565b6000805160206150b983398151915260006142c5846115f4565b600085815260208490526040808220600101869055519192508491839187917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a450505050565b600d54816143286000805160206150518339815191525490565b6143329190614d15565b11156143765760405162461bcd60e51b815260206004820152601360248201527213585e081cdd5c1c1b1e48195e18d959591959606a1b6044820152606401610f10565b61316082826148cd565b6005546010546040516323b872dd60e01b81526001600160a01b03928316926323b872dd926143b9923392909116908690600401614e9a565b6020604051808303816000875af11580156143d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143fc9190614e7d565b6115cd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220746f2070726f746f636f6c207661756c742061646472656044820152681cdcc819985a5b195960ba1b6064820152608401610f10565b6005546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061448e90339030908690600401614e9a565b6020604051808303816000875af11580156144ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144d19190614e7d565b6115cd5760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657220746f20636f6e74726163742061646472657373206661696044820152621b195960ea1b6064820152608401610f10565b6000805160206150318339815191526001600160a01b0385166145625760405163e602df0560e01b815260006004820152602401610f10565b6001600160a01b03841661458c57604051634a1406b160e11b815260006004820152602401610f10565b6001600160a01b0380861660009081526001830160209081526040808320938816835292905220839055811561460a57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161460191815260200190565b60405180910390a35b5050505050565b6000805160206150318339815191526001600160a01b03841661464d57818160020160008282546146429190614d15565b909155506146bf9050565b6001600160a01b038416600090815260208290526040902054828110156146a05760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401610f10565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b0383166146dd5760028101805483900390556146fc565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161474191815260200190565b60405180910390a350505050565b6147598282612870565b6131605760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610f10565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661245157604051631afcd79f60e31b815260040160405180910390fd5b61484a6147f9565b6000805160206150318339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036148848482614f0c565b5060048101611d328382614f0c565b61489b6147f9565b6001600160a01b0381166124b257604051631e4fbdf760e01b815260006004820152602401610f10565b613fa56147f9565b6001600160a01b0382166148f75760405163ec442f0560e01b815260006004820152602401610f10565b61316060008383614611565b60006020828403121561491557600080fd5b81356001600160e01b03198116811461492d57600080fd5b9392505050565b6000815180845260005b8181101561495a5760208185018101518683018201520161493e565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061492d6020830184614934565b80356001600160a01b03811681146149a457600080fd5b919050565b600080604083850312156149bc57600080fd5b6149c58361498d565b946020939093013593505050565b6000602082840312156149e557600080fd5b5035919050565b80151581146115cd57600080fd5b600060208284031215614a0c57600080fd5b813561492d816149ec565b600080600060608486031215614a2c57600080fd5b614a358461498d565b9250614a436020850161498d565b9150604084013590509250925092565b60008060408385031215614a6657600080fd5b82359150614a766020840161498d565b90509250929050565b600060208284031215614a9157600080fd5b61492d8261498d565b634e487b7160e01b600052604160045260246000fd5b600060208284031215614ac257600080fd5b813567ffffffffffffffff80821115614ada57600080fd5b818401915084601f830112614aee57600080fd5b813581811115614b0057614b00614a9a565b604051601f8201601f19908116603f01168101908382118183101715614b2857614b28614a9a565b81604052828152876020848701011115614b4157600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008060208385031215614b7457600080fd5b823567ffffffffffffffff80821115614b8c57600080fd5b818501915085601f830112614ba057600080fd5b813581811115614baf57600080fd5b8660208260061b8501011115614bc457600080fd5b60209290920196919550909350505050565b60008060408385031215614be957600080fd5b614bf28361498d565b9150614a766020840161498d565b602080825282518282018190526000919060409081850190868401855b82811015614c6c578151805185528681015187860152858101511515868601526060808201516001600160a01b0316908601526080908101519085015260a09093019290850190600101614c1d565b5091979650505050505050565b600181811c90821680614c8d57607f821691505b602082108103614cad57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610d4d57610d4d614cb3565b8082028115828204841417610d4d57610d4d614cb3565b600082614d1057634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610d4d57610d4d614cb3565b6020808252602f908201527f43616c6c657220646f6573206e6f742068617665204d414e4147455f5354414b60408201526e494e475f5550444154455f524f4c4560881b606082015260800190565b60208082526012908201527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600060018201614dcb57614dcb614cb3565b5060010190565b60208082526029908201527f43616c6c657220646f6573206e6f7420686176652045584348414e47455f5550604082015268444154455f524f4c4560b81b606082015260800190565b60208082526029908201527f43616c6c657220646f6573206e6f74206861766520544f4b454e5f534146455f60408201526850554c4c5f524f4c4560b81b606082015260800190565b600060208284031215614e7657600080fd5b5051919050565b600060208284031215614e8f57600080fd5b815161492d816149ec565b6001600160a01b039384168152919092166020820152604081019190915260600190565b601f821115611d6b57600081815260208120601f850160051c81016020861015614ee55750805b601f850160051c820191505b81811015614f0457828155600101614ef1565b505050505050565b815167ffffffffffffffff811115614f2657614f26614a9a565b614f3a81614f348454614c79565b84614ebe565b602080601f831160018114614f6f5760008415614f575750858301515b600019600386901b1c1916600185901b178555614f04565b600085815260208120601f198616915b82811015614f9e57888601518255948401946001909101908401614f7f565b5085821015614fbc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b828152604060208201526000614fe56040830184614934565b94935050505056fe50726f746f636f6c207661756c7420616464726573732063616e6e6f7420626520307769746864726177616c20616464726573732063616e6e6f74206265206e756c6c52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02cdc459158320f1e5dc6a2790e6223a1fae30e193e0b9c0c623cd787aee91ddd3526563697069656e7420616464726573732063616e6e6f74206265206e756c6c206164647265737302dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f008265d83785d3287e7d7481132632b4a43778b737fb1aeb3bb294f9e9984de840a264697066735822122052ec1e190f814e17968321d91805100514a95d20496e0ad914086894f0e6b67964736f6c63430008140033